<?php 
/** 
 * 题目：顺时针打印矩阵
 * 描述：
	输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字，例如，如果输入如下4 X 4矩阵： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
	思路：打印每一圈第一个坐标为（1,1）(2,2),(3,3)
     
    
    rows  cols  nums
     1     >=1   1
     2     >=2   1
     3     >=3   2
     4     >=4   2
     5     >=5   3
     n     >=n   intval((n - 1) / 2) + 1

     同理 当 
     rows  cols  nums
      >1     1    1
      >2     2    1
      >3     3    2
      >4     4    2
      >5     5    3
      >n     n   intval((n - 1) / 2) + 1
      所以，总得次数为 intval((min(cols,rows) - 1) / 2) + 1 
 */

/** 
 *
 * @param  [type] $matrix [description]
 * @return [type]         [description]
 */
function printMatrix($matrix)
{
    $rows = count($matrix);
    $cols = count($matrix[0]);
    $nums = intval((min($rows, $cols) - 1) / 2) + 1;
    $start = 0;
    while ($start < $nums) {
    	printMatrixCircle($matrix, $rows, $cols, $start);
    	 ++$start;
    }

}
/**
 *  s * *
 *  * * *
 *  * * * 
 *  	 (eX，eY)
 * 
 * [printMatrixCircle description]
 * @param  [type] $matrix [description]
 * @param  [type] $rows   [description]
 * @param  [type] $cols   [description]
 * @param  [type] $start  [description]
 * @return [type]         [description]
 */
function printMatrixCircle($matrix, $rows, $cols, $start)
{
	$endX = $cols - 1 - $start;
	$endY = $rows - 1 -$start;

	//从左到右打印第一行
	for ($i = $start; $i <= $endX; $i++) {
		$num = $matrix[$start][$i];
		echo $num.' ';
	}
	//从上到下打印一列 (至少需要 eY > start)
	if ($start < $endY) {
		for ($i = $start + 1; $i <= $endY; $i++) {
			$num = $matrix[$i][$endX];
		    echo $num.' ';
		}
	}
	//从右到左打印一列 
	if ($start < $endX && $start < $endY) {
		for ($i = $endX - 1; $i >= $start; --$i) {
			$num = $matrix[$endY][$i];
		    echo $num.' ';
		}
	}
    //从下到上打印一行 (statr 与eY之间有空的，eY - start > 1) &&(start < eX 否则 从上到下已完成了)
    if ($start < $endX && $start < $endY - 1) {
		for ($i = $endY - 1; $i >= $start + 1; --$i) {
			$num = $matrix[$i][$start];
		    echo $num.' ';
		}
	}
}


$arr = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9,10,11,12],
    [13,14,15,16],
    ];
$arr = [[1]];
$arr = [[1,2,3]];
printMatrix($arr);